package ferramentas.certificado;

import java.awt.Color;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JOptionPane;
import com.lowagie.text.*;
import com.lowagie.text.pdf.PdfWriter;
import java.io.File;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import pessoal.Certificado;

/**
 *
 * @author ciar
 */
public class GeradorCertificadoPDF {

    private Certificado certificado;
    private String localPDFCertificados;
    private SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");

    public GeradorCertificadoPDF(Certificado certificado, String localPDFCertificados) {
        this.certificado = certificado;
        this.localPDFCertificados = localPDFCertificados;
    }

    public void gerarPDF() {

        Document document = new Document(PageSize.A4.rotate());

        String diretorioCertificadosCurso = localPDFCertificados + getSeparador() + certificado.getNumeroCurso();

        File diretorioPDFCurso = new File(diretorioCertificadosCurso);

        if (!diretorioPDFCurso.exists()) {
            criarPastaPDFCurso(diretorioCertificadosCurso);
        }

        String localPDF = diretorioCertificadosCurso + getSeparador() + getNomeArquivoPDF();

        File certificadoPDF = new File(localPDF);

        if (!certificadoPDF.exists()) {

            try {
                PdfWriter.getInstance(document, new FileOutputStream(localPDF));
                document.open();
                //Image brasao = Image.getInstance("senado.tif");
                Image brasao = Image.getInstance(getImagesPath()+"ciar.tif");
                Image decoracao = Image.getInstance(getImagesPath()+"decoracao.tif");
                brasao.scaleAbsolute(580, 200);
                decoracao.scaleAbsolute(172, 584);
                decoracao.setAbsolutePosition(0, 0);
                brasao.setAbsolutePosition(200, 350);
                document.add(brasao);
                document.add(decoracao);

                Paragraph p0 = new Paragraph("     ", new Font(Font.COURIER, 36, Font.BOLD));
                p0.setAlignment("center");
                document.add(p0);
                document.add(p0);
                document.add(p0);

                //Paragraph p1 = new Paragraph("   "+relacaoalunos[i]+"   ", new Font(Font.TIMES_ROMAN, 26, Font.UNDERLINE));
                //p1.setAlignment("center");
                //document.add(p1);

                Paragraph p = new Paragraph("\n\nCertificamos que " + certificado.getNomeAluno().toUpperCase()
                        + " concluiu o curso de extensão " + certificado.getNomeCurso().toUpperCase()
                        + ", realizado pelo Centro Integrado de Aprendizagem em Rede, da Universidade Federal de Goiás, "
                        + //"no período de " + curso.getInicio() + " a " + curso.getFim() + ", " +
                        "com carga horária de " + certificado.getCargaHoraria() + " horas-aula.                                                             ",
                        new Font(Font.TIMES_ROMAN, 14, Font.BOLD));
                        
                p.setFirstLineIndent((float) 2);
                p.setSpacingAfter((float) 12);
                p.setSpacingBefore((float) 12);
                p.setAlignment(com.itextpdf.text.Element.ALIGN_JUSTIFIED_ALL);
                p.setIndentationLeft(80);
                p.setSpacingAfter(40);
                p.setSpacingBefore(40);
                p.setExtraParagraphSpace(20);
                document.add(p);


                Paragraph dataEmissao = new Paragraph("Data de Emissão: "+formatador.format(new Date()),new Font(Font.TIMES_ROMAN, 11, Font.ITALIC));
                dataEmissao.setAlignment(com.itextpdf.text.Element.ALIGN_RIGHT);
                document.add(dataEmissao);


                Image imgrodape = Image.getInstance(getImagesPath()+"rodape.tif");
                imgrodape.scaleAbsolute(600, 111);
                imgrodape.setAbsolutePosition(160, 20);
                document.add(imgrodape);

                document.newPage();

                Paragraph p4 = new Paragraph("REGISTRO E APROVEITAMENTO", new Font(Font.TIMES_ROMAN, 16, Font.BOLD));
                p4.setAlignment("center");
                document.add(p4);

                Paragraph p2 = new Paragraph(verso(certificado)[0], new Font(Font.TIMES_ROMAN, 8, Font.BOLD));
                Paragraph p3 = new Paragraph(verso(certificado)[1], new Font(Font.TIMES_ROMAN, 8, Font.BOLD));
                Table t = new Table(2, 2);
                t.setPadding(5);
                t.setSpacing(5);
                t.setBorderWidth(0);
                t.setBorderColor(new Color(255, 255, 255));
                Cell c1 = new Cell(p2);
                c1.setBorderColor(new Color(255, 255, 255));
                t.addCell(c1);
                Cell c2 = new Cell(p3);
                c2.setBorderColor(new Color(255, 255, 255));
                t.addCell(c2);
                document.add(t);
                Paragraph carga = new Paragraph("Carga horária total: " + certificado.getCargaHoraria() + "h", new Font(Font.TIMES_ROMAN, 14, Font.BOLD));
                carga.setAlignment(com.itextpdf.text.Element.ALIGN_CENTER);
                DecimalFormat formaterInscricao = new DecimalFormat("000000000000");
                DecimalFormat formaterCurso = new DecimalFormat("0000");
                document.add(carga);
                document.add(new Paragraph("Código: "+formaterInscricao.format(certificado.getInscricao())+"-"+formaterCurso.format(certificado.getNumeroCurso()), new Font(Font.COURIER, 8, Font.ITALIC)));
                document.close();


            } catch (DocumentException de) {
                de.printStackTrace();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }

    }

    public String[] verso(Certificado certificado) {
        String line_str;
        String conteudo[] = {"", ""};
        String content = certificado.getConteudo().replaceAll("#", "\n");

        int t = content.indexOf("EIXO", (content.length() / 2));
        //int t = content.indexOf("MÓDULO",(content.length()/2));
        String content2 = content + " ";
        conteudo[0] = content.substring(0, t);
        conteudo[1] = content2.substring(t, content.length());
        return conteudo;
    }

    public File getCertificado() {
        String diretorioCertificadosCurso = localPDFCertificados + getSeparador() + certificado.getNumeroCurso();

        String localPDF = diretorioCertificadosCurso + getSeparador() + certificado.getInscricao() + ".pdf";

        File certificadoPDF = new File(localPDF);

        return certificadoPDF;
    }

    private String getSeparador() {
        return System.getProperty("file.separator");
    }

    private void criarPastaPDFCurso(String diretorioCertificadosCurso) {
        File diretorio = new File(diretorioCertificadosCurso);
        diretorio.mkdir();
    }

    public String getNomeArquivoPDF(){
        return certificado.getInscricao() + ".pdf";
    }

    private String getImagesPath() {
        return localPDFCertificados+getSeparador()+"imagens"+getSeparador();
    }
}
